home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / linux / bsg.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  2.7 KB  |  85 lines

  1. #ifndef BSG_H
  2. #define BSG_H
  3.  
  4. #define BSG_PROTOCOL_SCSI        0
  5.  
  6. #define BSG_SUB_PROTOCOL_SCSI_CMD    0
  7. #define BSG_SUB_PROTOCOL_SCSI_TMF    1
  8. #define BSG_SUB_PROTOCOL_SCSI_TRANSPORT    2
  9.  
  10. struct sg_io_v4 {
  11.     __s32 guard;        /* [i] 'Q' to differentiate from v3 */
  12.     __u32 protocol;        /* [i] 0 -> SCSI , .... */
  13.     __u32 subprotocol;    /* [i] 0 -> SCSI command, 1 -> SCSI task
  14.                    management function, .... */
  15.  
  16.     __u32 request_len;    /* [i] in bytes */
  17.     __u64 request;        /* [i], [*i] {SCSI: cdb} */
  18.     __u64 request_tag;    /* [i] {SCSI: task tag (only if flagged)} */
  19.     __u32 request_attr;    /* [i] {SCSI: task attribute} */
  20.     __u32 request_priority;    /* [i] {SCSI: task priority} */
  21.     __u32 request_extra;    /* [i] {spare, for padding} */
  22.     __u32 max_response_len;    /* [i] in bytes */
  23.     __u64 response;        /* [i], [*o] {SCSI: (auto)sense data} */
  24.  
  25.         /* "dout_": data out (to device); "din_": data in (from device) */
  26.     __u32 dout_iovec_count;    /* [i] 0 -> "flat" dout transfer else
  27.                    dout_xfer points to array of iovec */
  28.     __u32 dout_xfer_len;    /* [i] bytes to be transferred to device */
  29.     __u32 din_iovec_count;    /* [i] 0 -> "flat" din transfer */
  30.     __u32 din_xfer_len;    /* [i] bytes to be transferred from device */
  31.     __u64 dout_xferp;    /* [i], [*i] */
  32.     __u64 din_xferp;    /* [i], [*o] */
  33.  
  34.     __u32 timeout;        /* [i] units: millisecond */
  35.     __u32 flags;        /* [i] bit mask */
  36.     __u64 usr_ptr;        /* [i->o] unused internally */
  37.     __u32 spare_in;        /* [i] */
  38.  
  39.     __u32 driver_status;    /* [o] 0 -> ok */
  40.     __u32 transport_status;    /* [o] 0 -> ok */
  41.     __u32 device_status;    /* [o] {SCSI: command completion status} */
  42.     __u32 retry_delay;    /* [o] {SCSI: status auxiliary information} */
  43.     __u32 info;        /* [o] additional information */
  44.     __u32 duration;        /* [o] time to complete, in milliseconds */
  45.     __u32 response_len;    /* [o] bytes of response actually written */
  46.     __s32 din_resid;    /* [o] din_xfer_len - actual_din_xfer_len */
  47.     __s32 dout_resid;    /* [o] dout_xfer_len - actual_dout_xfer_len */
  48.     __u64 generated_tag;    /* [o] {SCSI: transport generated task tag} */
  49.     __u32 spare_out;    /* [o] */
  50.  
  51.     __u32 padding;
  52. };
  53.  
  54. #ifdef __KERNEL__
  55.  
  56. #if defined(CONFIG_BLK_DEV_BSG)
  57. struct bsg_class_device {
  58.     struct device *class_dev;
  59.     struct device *parent;
  60.     int minor;
  61.     struct request_queue *queue;
  62.     struct kref ref;
  63.     void (*release)(struct device *);
  64. };
  65.  
  66. extern int bsg_register_queue(struct request_queue *q,
  67.                   struct device *parent, const char *name,
  68.                   void (*release)(struct device *));
  69. extern void bsg_unregister_queue(struct request_queue *);
  70. #else
  71. static inline int bsg_register_queue(struct request_queue *q,
  72.                      struct device *parent, const char *name,
  73.                      void (*release)(struct device *))
  74. {
  75.     return 0;
  76. }
  77. static inline void bsg_unregister_queue(struct request_queue *q)
  78. {
  79. }
  80. #endif
  81.  
  82. #endif /* __KERNEL__ */
  83.  
  84. #endif
  85.